#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

#define BUFSIZE 200
#define NORMAL 0

void main(int argc, char * argv[]){

  int d;    //descripteur de socket
  int s;
  int len;
  struct sockaddr_in sa;  //structure adresse Internet
  struct hostent *hp;
  struct servent *sp;
  char *myname;   //pointeur sur le nom du programme
  char buf[BUFSIZE];
  char *host,*user;   //pointeur sur le serveur et l'utilisateur
  

  myname = argv[0];    //test des arguments
  if (argc != 3){
    fprintf(stderr,"Usage : %s serveur user\n",myname);
    exit(1);
  }

  user = argv[2];
  host = argv[1];

  if ((hp = gethostbyname(host)) == NULL){ //voir si le serveur existe

    fprintf(stderr,"%s : %s serveur inconnu\n",myname,host);
    exit(1);
  }

  //bcopy((char *)hp->h_addr,(char *)&sa.sin_addr,hp->h_length);
  //sa.sin_family = hp->h_addr_type;

  if((sp = getservbyname("hey","tcp")) == NULL){
    exit(1);
  }

  //  sa.sin_port = sp->s_port;




  if((s = socket(AF_INET,SOCK_STREAM,0))<0){
    perror("ERROR socket");
    exit(1);
  }

  bzero(&sa,sizeof(sa));
  sa.sin_family = AF_INET;
  sa.sin_port = htons(7000);
  sa.sin_addr.s_addr = inet_addr("129.199.129.1");
  
  fprintf(stdout,"Service %d demandé à %s\n",sa.sin_port,host);
  fprintf(stdout,"Type d'adresse %d; descripteur de socket\n",sa.sin_family);

  if(connect (s,(const struct sockaddr *)&sa,sizeof(sa)) <0){
    perror("ERROR connect");
    exit(1);
  }

  send(s,user,strlen(user)+1,NORMAL);  //envoie de la requête

  recv(s,buf,BUFSIZE,NORMAL);  //lecture de la réponse

  fprintf(stdout,"Réponse : %s\n",buf);  //écriture de la réponse

  close(s);      //fermeture de la connexion

  exit(0);
}

